/** 
* Projet AP5 - Agenda PDA
* ContactViewer.java
*/

package pda.view;

import pda.control.ContactCtrl;
import pda.datas.ContactEngine;
import pda.datas.Contact;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.SwingConstants;
import javax.swing.JList;
import java.awt.GridLayout;
import java.awt.FlowLayout;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.DefaultListModel;
import javax.swing.JScrollPane ;


/**
* Classe qui creer l'interface pour l'application des contacts */

public class ContactViewer {

//##########################################################################################################
//										Attributs
//##########################################################################################################

	/** Objet de la classe ContactEngine */
    	private ContactEngine engine;
	/** Objet de la classe ContactCtrl */
    	private ContactCtrl controller;

	/** Panneau principal de l'interface */
    	private JPanel panel;
	/** Panneau pour les boutons */
	private JPanel panelBtn;

	/** La liste des contacts */
    	private JList laListe;

	/** Champ de texte du nom */
	private JTextField tfNom;
	/** Champ de texte du prenom */
	private JTextField tfPrenom;
	/** Champ de texte du telephone */
	private JTextField tfTel;

	/** Boutton Valider */
	private JButton valider;

	/** Barre defilante */
	private JScrollPane scroll;
		

//##########################################################################################################
//										Constructeur
//##########################################################################################################

	/** 
	* Le constructeur de la classe 
	* @param anEngine Objet de ContactEngine 
	* @param controller Objet de ContactCtrl
	*/
    	public ContactViewer ( ContactEngine anEngine, ContactCtrl controller ) {
        	this.engine = anEngine;
        	this.controller = controller;
			panel = new JPanel(new BorderLayout());
			this.initHome();
		}
		

//##########################################################################################################
//										Methodes 
//##########################################################################################################
	
	/**  
	* Creer l'interface de l'application contact
	*/	
	public void initHome(){
		panel.removeAll();
		laListe = new JList( new DefaultListModel());
		scroll = new JScrollPane(laListe);
		panelBtn = new JPanel();
		JLabel labelAppli = new JLabel("Contacts");
		JButton add = new JButton(new ImageIcon("data/img/contact/add.png"));
		JButton edit = new JButton(new ImageIcon("data/img/contact/edit.png"));
		JButton del = new JButton(new ImageIcon("data/img/contact/del.png"));
			
		
		labelAppli.setHorizontalAlignment(SwingConstants.CENTER);
		
		panel.add(labelAppli, BorderLayout.NORTH);
		panel.add(scroll, BorderLayout.CENTER);
		panel.add(panelBtn, BorderLayout.SOUTH);

		panelBtn.add(add);
		panelBtn.add(edit);
		panelBtn.add(del);

		laListe.addMouseListener(controller);
		add.addActionListener(controller);
		edit.addActionListener(controller);
		del.addActionListener(controller);
		
		add.setActionCommand("add");
		edit.setActionCommand("edit");
		del.setActionCommand("del");			
		controller.initListe();
	}
		
	/**
	* Retourne la barre de defilement
	* @return la barre de defilement
	*/
	public JScrollPane getPanelListe(){
		return scroll;
	}

	/**
	*this method can add Abonnes on the interface
	*
	*@param cle name of the contact
	*/
	public void ajouter(String cle){
		int index = 0; 
		int size = ((DefaultListModel) laListe.getModel()).getSize(); 
		for (index = 0; index < size - 1; index++){
			String[] tmp = cle.split(", ");
			String[] tmp2 = ((String)(((DefaultListModel) laListe.getModel())).getElementAt( index )).split(", ");
			if ( (tmp2[0].toUpperCase()).compareTo((tmp[0].toUpperCase())) > 0)
				break;
		}
		((DefaultListModel) laListe.getModel()).add(index, cle);
	}
	

	/**
	* permet d'editer le contact
	* @param leContact Le contact a modifier
	*/
	public void edition(Contact leContact){

		this.ajout();
		tfNom.setText(leContact.getName());
		tfNom.setEnabled(false);
		tfPrenom.setText(leContact.getFirstName());
		tfPrenom.setEnabled(false);
		tfTel.setText(leContact.getTel());
		valider.setActionCommand("editOk");
		
	}

	/**
	* Permet d'ajouter un contact
	*/
	public void ajout(){

		JLabel lblTitre = new JLabel("Nouveau contact");
		JLabel lblNom = new JLabel("<html>Nom :&nbsp; &nbsp; &nbsp; &nbsp;</html>");
		JLabel lblPrenom = new JLabel("Prenom :");
		JLabel lblTel = new JLabel("<html>Num&eacute;ro :</html>");
		valider = new JButton("Valider");
		JButton cancel = new JButton("Annuler");
		JPanel panelBtn = new JPanel();
		JPanel panelTF = new JPanel();
		JPanel panel1 = new JPanel();
		JPanel panel2 = new JPanel();
		JPanel panel3 = new JPanel();
		
		tfNom = new JTextField(15);
		tfPrenom = new JTextField(15);
		tfTel = new JTextField(15);
		lblTitre.setHorizontalAlignment(SwingConstants.CENTER);
		
		panel.removeAll();
		panel.add(lblTitre, BorderLayout.NORTH);
		panel.add(panelTF, BorderLayout.CENTER);
		panel.add(panelBtn, BorderLayout.SOUTH);
		
		panelTF.setLayout(new GridLayout(7,1,10,10));
		
		panel2.add(lblNom);
		panel2.add(tfNom);
		
		panel1.add(lblPrenom);
		panel1.add(tfPrenom);
		
		panel3.add(lblTel);
		panel3.add(tfTel);
		
		panelTF.add(new JPanel());
		panelTF.add(panel1);
		panelTF.add(new JPanel());
		panelTF.add(panel2);
		panelTF.add(new JPanel());
		panelTF.add(panel3);
		panelTF.add(new JPanel());
		
		panelBtn.add(valider);
		panelBtn.add(cancel);
		
		valider.addActionListener(controller);
		cancel.addActionListener(controller);
		valider.setActionCommand("addOk");
		cancel.setActionCommand("cancel");
		
	}

//##########################################################################################################
//										Methodes get 
//##########################################################################################################

	/**
	* Retourne le panel principal
	* @return panel Le panel principal de l'interface des contacts */
    	public JPanel getPanel() {return panel;	}
	/**
	* Retourne la liste des contacts
	* @return laListe */
	public JList getListe() { return laListe ; }
	/**
	* Retourne le nom contenu dans les champs
	* @return le text dans le champ */
	public String getNom() { return tfNom.getText() ; }
	/**
	* Retourne le prenom contenu dans les champs
	* @return le text dans le champ */
	public String getPrenom() { return tfPrenom.getText() ; }
	/**
	* Retourne le telephone contenu dans les champs
	* @return le text dans le champ */
	public String getTel() { return tfTel.getText() ; }

} 
